home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / BARNET / FREENET / HOUGHTON / POPST124 / !POPstar / c / status < prev    next >
Text File  |  1998-03-06  |  6KB  |  255 lines

  1. /* Status in a Toolbox window
  2.  
  3. $Header: ADFS::Nisu.\044.Internet.!POPstar.RCS.status,v.c 1.1 1998/02/25 21:57:19 root Exp root $
  4.  
  5. $Log: status,v.c $
  6. Revision 1.1  1998/02/25 21:57:19  root
  7. Initial revision
  8.  
  9.  
  10. */
  11. #include <stdio.h>
  12. #include <stdlib.h>
  13. #include "memleak.h"
  14. #include <string.h>
  15.  
  16. #include "event.h"
  17. #include "gadgets.h"
  18. #include "wimplib.h"
  19. #include "window.h"
  20.  
  21. #include "config.h"
  22. #include "dkm.h"
  23. #include "err.h"
  24. #include "log.h"
  25. #include "res.h"
  26. #include "status.h"
  27. #include "stopquit.h"
  28.  
  29. static ObjectId status_id = NULL_ObjectId;
  30. static int status_config;
  31.  
  32. struct status_info {
  33.   /*ObjectId id;*/
  34.   int count;        /* Number of messages */
  35.   int total;        /* Bytes in current msg */
  36.   int abstotal;        /* Total number of bytes */
  37.   int transferred;    /* Total transferred so far */
  38.   int lasttrans;    /* Total transferred up to end of last message */
  39. };
  40.  
  41. enum {
  42.   status_GUser = 1,
  43.   status_GMsgBytes = 4,
  44.   status_GMsgCount,
  45.   status_GTotal = 7,
  46.   status_GStop = 0x10,
  47.   status_GLabel
  48. };
  49.  
  50. static bool status_manual = false;
  51.  
  52. static bool status_close_handler(int c, ToolboxEvent *e, IdBlock *i, void *h)
  53. {
  54.   c=c; e=e; i=i; h=h;
  55.  
  56.   status_manual = false;
  57.   return true;
  58. }
  59.  
  60. static bool status_open_handler(int c, ToolboxEvent *e, IdBlock *i, void *h)
  61. {
  62.   c=c; e=e; i=i; h=h;
  63.  
  64.   return (status_manual = true);
  65. }
  66.  
  67. void status_init(ObjectId id)
  68. {
  69.   status_id = id;
  70.   E(toolbox_set_client_handle(0, id, (void *) (int) stopquit_Stop));
  71.   E(event_register_toolbox_handler(-1, event_ClickStatus,
  72.       status_open_handler, 0));
  73.   E(event_register_toolbox_handler(-1, event_CloseStatus,
  74.       status_close_handler, 0));
  75. }
  76.  
  77. static void status_open()
  78. {
  79.   if (config_lookup_bool("BigStatus"))
  80.   {
  81.     WimpGetWindowStateBlock wstate;
  82.     BBox extent;
  83.  
  84.     E(window_get_wimp_handle(0, status_id, &wstate.window_handle));
  85.     E(wimp_get_window_state(&wstate));
  86.     E(window_get_extent(0, status_id, &extent));
  87.     wstate.visible_area.xmin = wstate.visible_area.xmax -
  88.         (extent.xmax - extent.xmin);
  89.     wstate.visible_area.ymin = wstate.visible_area.ymax -
  90.         (extent.ymax - extent.ymin);
  91.     wstate.xscroll = wstate.yscroll = 0;
  92.     E(toolbox_show_object(0, status_id, Toolbox_ShowObject_FullSpec,
  93.         &wstate.visible_area, NULL_ObjectId, NULL_ComponentId));
  94.   }
  95.   else
  96.     E(toolbox_show_object(0, status_id, Toolbox_ShowObject_Default, 0,
  97.         NULL_ObjectId, NULL_ComponentId));
  98. }
  99.  
  100. status_handle status_create()
  101. {
  102.   status_config = config_lookup_num("AutoStatus");
  103.  
  104.   if (status_config)
  105.   {
  106.     status_handle h = malloc(sizeof(struct status_info));
  107.     if (!h)
  108.       return 0;
  109.     h->transferred = h->lasttrans = 0;
  110.     if (status_config == 2)
  111.       status_open();
  112.     return h;
  113.   }
  114.   return 0;
  115. }
  116.  
  117. void status_free(status_handle h)
  118. {
  119.   if (status_id != NULL_ObjectId)
  120.   {
  121.     status_blank(h);
  122.     if (!status_manual)
  123.       E(toolbox_hide_object(0, status_id));
  124.   }
  125.   free(h);
  126. }
  127.  
  128. void status_blank(status_handle h)
  129. {
  130.   h=h;
  131.  
  132.   if (status_id != NULL_ObjectId)
  133.   {
  134.     E(displayfield_set_value(0, status_id, status_GUser, ""));
  135.     E(displayfield_set_value(0, status_id, status_GMsgBytes, ""));
  136.     E(displayfield_set_value(0, status_id, status_GMsgCount, ""));
  137.     E(displayfield_set_value(0, status_id, status_GTotal, ""));
  138.   }
  139. }
  140.  
  141. void status_set_label(status_handle h, const char *msg)
  142. {
  143.   h=h;
  144.  
  145.   if (status_id != NULL_ObjectId)
  146.     E(button_set_value(0, status_id, status_GLabel, msg));
  147. }
  148.  
  149. void status_show_misc(status_handle h, const char *msg)
  150. {
  151.   h=h;
  152.  
  153.   if (status_id != NULL_ObjectId)
  154.     E(displayfield_set_value(0, status_id, status_GUser, msg));
  155. }
  156.  
  157. void status_show_user(status_handle h, const char *name, const char *server)
  158. {
  159.   h=h;
  160.  
  161.   if (status_id != NULL_ObjectId)
  162.   {
  163.     char msg[100];
  164.  
  165.     sprintf(msg, "%s@%s", name, server);
  166.     E(displayfield_set_value(0, status_id, status_GUser, msg));
  167.   }
  168. }
  169.  
  170. void status_count_total(status_handle h, int n)
  171. {
  172.   if (h)
  173.     h->count = n;
  174.   if (status_id != NULL_ObjectId)
  175.   {
  176.     char msg[16];
  177.  
  178.     sprintf(msg, "0/%d", n);
  179.     E(displayfield_set_value(0, status_id, status_GMsgCount, msg));
  180.     if (n && status_config == 1)
  181.       status_open();
  182.   }
  183. }
  184.  
  185. void status_count(status_handle h, int m)
  186. {
  187.   if (h)
  188.   {
  189.     h->total = 0;
  190.     h->lasttrans = h->transferred;
  191.     if (status_id != NULL_ObjectId)
  192.     {
  193.       char msg[16];
  194.  
  195.       sprintf(msg, "%d/%d", m, h->count);
  196.       E(displayfield_set_value(0, status_id, status_GMsgCount, msg));
  197.     }
  198.   }
  199.   /*xsyslogf(log_NAME, log_DebugInfo, "Message : %d", m);*/
  200. }
  201.  
  202. void status_bytes_total(status_handle h, int t)
  203. {
  204.   char msg[16] = "0/";
  205.  
  206.   if (h)
  207.     h->total = t;
  208.   if (status_id != NULL_ObjectId)
  209.   {
  210.  
  211.     dkm_to_str(msg + 2, t);
  212.     E(displayfield_set_value(0, status_id, status_GMsgBytes, msg));
  213.   }
  214. /*
  215.   xsyslogf(log_NAME, log_DebugInfo, "Total bytes in message : %s (%d)", msg, t);
  216. */
  217. }
  218.  
  219. void status_bytes(status_handle h, int n)
  220. {
  221.   if (h && status_id != NULL_ObjectId)
  222.   {
  223.     char msg[16];
  224.     int len;
  225.  
  226.     dkm_to_str(msg, n);
  227.     if (h->total)
  228.     {
  229.       len = strlen(msg);
  230.       msg[len] = '/';
  231.       dkm_to_str(msg + len + 1, h->total);
  232.     }
  233.     E(displayfield_set_value(0, status_id, status_GMsgBytes, msg));
  234.     dkm_to_str(msg, h->transferred = h->lasttrans + n);
  235.     len = strlen(msg);
  236.     msg[len] = '/';
  237.     dkm_to_str(msg + len + 1, h->abstotal);
  238.     E(displayfield_set_value(0, status_id, status_GTotal, msg));
  239.   }
  240. }
  241.  
  242. void status_total_total(status_handle h, int n)
  243. {
  244.   if (h)
  245.     h->abstotal = n;
  246.   if (status_id != NULL_ObjectId)
  247.   {
  248.     char msg[16];
  249.  
  250.     dkm_to_str(msg, n);
  251.     E(displayfield_set_value(0, status_id, status_GTotal, msg));
  252.   }
  253.   /*xsyslogf(log_NAME, log_DebugInfo, "Total bytes in maildrop : %d", n);*/
  254. }
  255.